package com.lq.JDBC.Dao.impl;

import com.lq.JDBC.Dao.UserDao;
import com.lq.JDBC.Utils.DBUtils;
import com.lq.JDBC.entity.User;

import java.sql.*;

/**
 * 泛型的实现可以在父类引用指向子类对象动态调用的时候确定，
 * 也可以在继承的时候，编写这个类的时候就实现了泛型（如下）
 */
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {

    /**
     * 这里为了保证每个数据操作步骤是在一个connection中执行的，所以采用传入统一的connection
     * @param id
     * @param money
     * @return
     */
    public int transfer(int id, int money){
        Connection connection = null;
        PreparedStatement statement = null;
        String sql ="update `user` set money= money + ? where id = ?";

        //注释掉的内容都抽到了业务实现层Service中去了，保持Dao层实现的简介
        try {
            // 获取连接
            connection = DBUtils.getConnection();
            // 获取statement
            statement = connection.prepareStatement(sql);
            statement.setInt(1,money);
            statement.setInt(2,id);

            // 获取结果集
            return statement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();

            return -1;
        } finally {
            // 为了不影响后续操作业务的进行，关闭资源，注意这里只能关闭statement资源
            //不能关闭connection,同时由于这里是操作而不是查询所以返回结果也不用关闭使用null
            DBUtils.closeAll(null, statement, null);
        }
    }
}
